import axios from 'axios' // 导入axios
import { useUserStore } from '../stores'
import { ElMessage } from 'element-plus'
import router from '../router'

// 类型定义
// export interface ResponseData {
// 	code: number
// 	message: string
// 	data?: any
// }

const baseURL = 'http://localhost:8900/api' // 本地基地址
// const baseURL = 'https://www.mck.org.cn/api' // 云服务器基地址
// const baseURL = 'http://localhost:80/api' // nginx地址

// 创建实例对象
const instance = axios.create({
	// TODO 1. 基础地址，超时时间
	baseURL,
	timeout: 60000, // 60s
	headers: {
		'Content-Type': 'application/json' // 设置默认的Content-Type
	}
})

// 请求拦截器，发送请求前触发
instance.interceptors.request.use(
	(config) => {
		const useStore = useUserStore()
		const token = useStore.userInfo?.token

		// 如果请求是登录请求，则不检查 token
		if (config.url?.includes('/login')) return config

		if (token) config.headers.Authorization = 'Bearer ' + token

		return config
	},
	(err) => Promise.reject(err)
)

// 响应拦截器，响应成功时触发
instance.interceptors.response.use(
	(res) => {
		// 处理流式响应（如SSE），直接返回原始响应
		if (res.headers['content-type']?.includes('text/event-stream')) {
			return res
		}

		// 普通JSON响应处理
		if (res.data.code === 1) return res

		ElMessage.error(res.data.msg || '服务异常')
		return Promise.reject(res.data)
	},
	(err) => {
		// 处理401错误
		if (err.response?.status === 401) {
			const errorMsg = err.response.data?.msg || '身份已过期，请重新登录'
			ElMessage.error(errorMsg)
			router.push('/login')
		}
		// 处理500等服务器错误
		else if (err.response?.data?.msg) {
			// 如果响应中包含错误信息，优先显示响应中的错误信息
			ElMessage.error(err.response.data.msg)
		} else {
			// 否则显示通用错误信息
			ElMessage.error(err.message || '服务异常')
		}
		return Promise.reject(err)
	}
)

// 默认导出，导入需带{ }
export default instance

export { baseURL }
